package tag17_01_08.aufgabe;

import java.util.Scanner;


public class TicTacToe{

	public static int hatGewonnen (int [] spielstand, int spieler){

		int counter = spielstand.length;

		// Test, ob Spiel der Spieler, der gerade gezogen hat
		// durch diesen Zug gewonnen hat.

		if(spielstand[0]==spieler && spielstand[1]==spieler  && spielstand[2]==spieler){
			return spieler; 
		}   
		if(spielstand[3]==spieler && spielstand[4]==spieler  && spielstand[5]==spieler){ 
			return spieler;
		}
		if(spielstand[6]==spieler && spielstand[7]==spieler  && spielstand[8]==spieler){ 
			return spieler;
		}
		if(spielstand[0]==spieler && spielstand[4]==spieler  && spielstand[8]==spieler){ 
			return spieler;
		}
		if(spielstand[6]==spieler && spielstand[4]==spieler  && spielstand[2]==spieler){ 
			return spieler;
		}
		if(spielstand[0]==spieler && spielstand[3]==spieler  && spielstand[6]==spieler){ 
			return spieler;
		}
		if(spielstand[1]==spieler && spielstand[4]==spieler  && spielstand[7]==spieler){ 
			return spieler;
		}
		if(spielstand[2]==spieler && spielstand[5]==spieler  && spielstand[8]==spieler){ 
			return spieler; 
		}   

		// Test, ob es nach dem letzten Zug  remis endet		      
		for(int s=0;s<spielstand.length;s++){
			if(spielstand[s]!=-1)
				counter--;
		}		

		if(counter==0){
			return 2;
		}

		return -1;
	}
	public static void ausgabeSpielstand(int [] spielstand){
		// Ausgabe Spielstand
		for(int zeile = 0;zeile < 3;zeile++){
			for(int spalte = 0; spalte<3; spalte++){
				if(spalte==2){
					switch(spielstand[3*zeile+spalte]){
					case 0:System.out.println("0");break;
					case 1:System.out.println("X");break;
					case -1:System.out.println(" ");break;
					}
				}else{  
					switch(spielstand[3*zeile+spalte]){
					case 0:System.out.print("0|");break;
					case 1:System.out.print("X|");break;
					case -1:System.out.print(" |");break;
					}	
				}
			}	
			if(zeile<2)
				System.out.println("-----");
		}	

		System.out.print("\n\n");
		System.out.println("0 = durch Sie belegtes Feld"+"\t"
				+"X = durch Computer belegtes Feld"+"\t");
	}


	public static void main ( String args [] ){

		Scanner scanner = new Scanner(System.in);
		int fortsetzen = 1;	   
		while(fortsetzen == 1){ 
			// Wie steht das Spiel? 
			int[] spielstand = new int [9]; 
			// Alle Felder als frei markieren
			for(int i=0;i< spielstand.length;i++)
				spielstand[i]=-1; 
			// Bildschrimausgabe zur Spielbeschreibung
			System.out.print("\n"); 
			System.out.println("1|2|3");
			System.out.println("-----");
			System.out.println("4|5|6");
			System.out.println("-----");
			System.out.println("7|8|9");
			int gewinner=-1;//Noch kein Gewinner
			while(true){
				int i=0;
				boolean eingabegueltig=false;
				while(!eingabegueltig){
					System.out.print("Geben Sie bitte die Zahl des Feldes ein "+"\n"+ 
					"das Sie belegen moechten : "  );
					i = scanner.nextInt();
					if((0<i && i<10))
						eingabegueltig=true;
				}			
				// Zwischenstand speichern oder Fehlerausgabe
				if(spielstand[i-1]==-1)
					spielstand[i-1]=1;
				else {
					System.out.println("Ungueltiger Zug");
					continue;
				}			
				// Test auf Gewinner
				gewinner = hatGewonnen(spielstand, 1);
				if(gewinner !=-1)
					break;	 
				// Computer zieht
				while(true){
					int zufallszahl = (int) (Math.random()* 8 );

					// Neuer Spielstand

					if(spielstand[zufallszahl] == -1){
						spielstand[zufallszahl]=0;
						break;

					}else
						continue; 
				}

				// Test auf Gewinner

				gewinner = hatGewonnen(spielstand, 0);
				if(gewinner !=-1)
					break;	 

				ausgabeSpielstand(spielstand);


			}//while

			// Ausgabe Spielergebnis 
			System.out.print("\n\n");

			ausgabeSpielstand(spielstand);


			// GewinnerAusgabe


			switch(gewinner){
			case(1):  System.out.println("Sie haben gewonnen! :-)");break;
			case(0):  System.out.println("Sie haben verloren! :-(");break;
			case(2):  System.out.println("Das Spiel endet unentschieden!");break;
			}


			System.out.println("Fuer ein Neues Spiel geben Sie bitte 1 ein, zum Beenden 0");

			fortsetzen = scanner.nextInt();


		}// while Spiel


	}
}   

